home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / datasys.d < prev    next >
Text File  |  1997-10-26  |  10KB  |  229 lines

  1. DEFINITION MODULE dataSys;
  2.  
  3. (*==============================================================*
  4.  * Modul:               CAT-Datenbank, Strukurdefinition        *
  5.  * Autor:               Johannes G”ttker-Schnetmann             *
  6.  * erstellt am:         11.10.1992                              *
  7.  * letzte Žnderung am:  12.08.1992                              *
  8.  * Version:             1.2                                     *
  9.  * Interne Version:     V#0002                                  *
  10.  *==============================================================*
  11.  
  12.  Definition der Strukturen in der Cat-Datenbank. Hier, damit man
  13.  auch von CatPutz aus bequem an diese Definitionen kommt.
  14.  
  15.  *----------------------------------------------------------------------------
  16.  * Datum    Vers. Autor  Žnderung (Arbeitsbericht)                            
  17.  *----------------------------------------------------------------------------
  18.  * 11.10.92 0001  JGS    Erste Version
  19.  * 22.12.92 0002  JGS    grPosType hierhin, kann nun auch direkt nach CatPutz
  20.  *                       importiert werden.
  21.  * 12.08.93       JGS    Zwei weitere Flags eingefhrt.
  22.  *----------------------------------------------------------------------------
  23.  *)
  24.  
  25. FROM SYSTEM IMPORT TSIZE;
  26.  
  27. (* Verlagert von data nach hier, fr CatPutz! *)
  28.  
  29. CONST private  = 0;
  30.       empty    = 0FFFFH;
  31.       notSaved = 0FFFEH;
  32.  
  33.      personalName = 'Pers”nliche';
  34.  
  35. CONST bGelesen = 0; bFiltered = 1; bInteressant = 2; bTeilloeschung = 3;
  36.       bTotalloeschung = 4; bKommentieren = 5; bAntworten = 6; bUser1 = 7;
  37.       bUser2 = 8; bVererben = 9; (* bFiltered = 10; *)
  38.       (* Statusbits einer Msg *)
  39.       bComToOwnMessage = 10;
  40.  
  41.       (* Vorl„ufig bis bei der Maus die Message-Ids diesen Namen auch verdienen: *)
  42.       bOldDupe = 15;
  43.       
  44.       (* Neu, eigene Messages werden gekennzeichnet *)
  45.       bOwnMessage = 14;
  46.       bOldComToOwnMessage = 13;
  47.       (* da einige Betaversionen das so hatten, wird in einer šbergangsphase beides *)
  48.       (* erkannt und ggf. 13 entfernt und dafr 10 gesetzt *)
  49.  
  50. CONST maxGroup  = 65534;
  51.  
  52. (* Header fr gruppen.pos und *.par *)
  53. TYPE  FileHeaderType = RECORD
  54.         CatMagic : LONGCARD;
  55.         Version  : CARDINAL;
  56.         VersionMagic : CARDINAL;
  57.       END;
  58.  
  59. CONST dbHeaderLength = TSIZE(FileHeaderType);
  60.  
  61.       dbCatMagic     = 43415420H;  (* "CAT "                    *)
  62.       dbVersion      = 1;          (* Versionsnummer der data.i *)
  63.       dbVersionMagic = 0123H;      (* Versionsmagic             *)
  64.       grPosVersionMagic = 0124H;      (* Versionsmagic             *)
  65.  
  66.       standardHeader = FileHeaderType {dbCatMagic, dbVersion, dbVersionMagic};
  67.  
  68. (*--------------------------------------------------------------------
  69.   Cat-Version    Magic        Bemerkungen
  70.     0001           0123H        Erste Version der neuen Datenbank
  71.   --------------------------------------------------------------------*)
  72.  
  73. TYPE posType   = (aktuellePos, neuePos, letztePos, unreadPos, unreadCount);
  74.      onePos    = ARRAY posType OF CARDINAL;
  75.      grPosType = 
  76.        RECORD
  77.          head : FileHeaderType;
  78.          save : onePos;
  79.          pos  : POINTER TO ARRAY[0..maxGroup] OF onePos;
  80.          posGroups : CARDINAL;
  81.          usedGroups: CARDINAL;
  82.        END;
  83.  
  84. CONST mVon   = 0;    mAn  = 1;       mMId   = 2;
  85.       mRId   = 3;    mBox = 4;       mName  = 5;
  86.       mRefNr = 6;    mDistribution = 7; 
  87.       mGate  = 8;    mMime = 9;      mFollowup = 10;
  88.       mReplyTo = 11; mSender  = 12;
  89.  
  90.  
  91.       mUnknown = 14; mPrivateBytes = 15;
  92.       (* BITS in items *)
  93.  
  94. (*-------------------------------------------------------------------------------
  95.    Achtung, es ist wichtig, daž die crc an erster Stelle steht und zwei Bytes
  96.    lang ist, davon geht data.i an mehreren Stellen aus. Aužerdem muž der
  97.    dupeInfoType auf den pBlock passen!
  98. --------------------------------------------------------------------------------*)
  99.  
  100. (*-- Aus Redundanzgrnden doppelt gespeicherte Information --*)
  101. TYPE dupeInfoPtr = POINTER TO dupeInfoType;
  102.  
  103. TYPE dupeInfoType = RECORD
  104.          Datum     : LONGCARD; (* Datum im Maustauschformat *)
  105.          items     : BITSET;   (* In der DAT vorhandene Dinge, *)
  106.                                (* in der Reihenfolge wie oben angegeben *)
  107.          bits      : BITSET;
  108.          hLength   : CARDINAL; (* L„nge des MessageHeaders  *)
  109.          idLength  : CARDINAL; (* ID-L„nge im Header        *)
  110.          Length    : CARDINAL; (* L„nge der Mitteilung      *)
  111.          Start     : LONGCARD; (* Offset in der Datendatei  *)
  112.        (*-- Bis hier genau wie in pBlock --*)
  113.          setTerminator : CARDINAL; (* beendet den Datensatz *)
  114.        END;
  115.  
  116. CONST Terminator = 0AA00H;
  117. (* Kommt nach meinen Tests recht selten vor und ergibt damit einen gewissen Anhaltspunkt *)
  118.  
  119. (*-- Parameterblock fr die Parameterfiles --*)
  120. TYPE pBlockPtr  = POINTER TO pBlock;
  121.  
  122. TYPE pBlock =
  123.        RECORD
  124.          crc       : CARDINAL; (* crc ber den Rest des Parameterblocks *)
  125.          Datum     : LONGCARD; (* Datum im Maustauschformat *)
  126.          items     : BITSET;   (* In der DAT vorhandene Dinge, *)
  127.                                (* in der Reihenfolge wie oben angegeben *)
  128.          bits      : BITSET;
  129.          hLength   : CARDINAL; (* L„nge des MessageHeaders  *)
  130.          idLength  : CARDINAL; (* ID-L„nge im Header        *)
  131.          Length    : CARDINAL; (* L„nge der Mitteilung      *)
  132.          Start     : LONGCARD; (* Offset in der Datendatei  *)
  133.          upMess    : CARDINAL;
  134.          downMess  : CARDINAL;
  135.          rightMess : CARDINAL;
  136.          leftMess  : CARDINAL;
  137.          KomCount  : CARDINAL;
  138.        END; (* 30 Byte *)
  139.  
  140. (*-- Bei pers”nlichen Msgs zus„tzlich gespeicherte Infos --*)
  141. TYPE pInfoPtr  = POINTER TO pInfoType;
  142.  
  143. TYPE pInfoType = RECORD
  144.        LeseDatum : LONGCARD;
  145.        Status,
  146.        locked    : CHAR; (* wenn # 0 dann Status nicht vom User „nderbar *)
  147.      END;
  148.  
  149.  
  150. (*--------------------------------------------------------------------
  151.   Neuer Aufbau eines *.DAT-Eintrages:
  152.           +=========================+ \
  153.           | Header, max. 16kB       |  |
  154.           |                         |  \  Erl„uterung unten
  155.           |                         |  /  L„nge in "hLength"
  156.           |                         |  |
  157.        /  +=========================+ /
  158. Gesamt-|  | Messagetext, max 64kB   |     Messagetext, Strings, die mit lf getrennt
  159. L„nge  <  |                         |     sind. Demn„chst einmal noch nullterminiert
  160. in     |  |                         |     am Ende.
  161. Length \  +=========================+ \
  162.           | long Datum              |  |
  163.           +-------------------------+  |
  164.           | word items              |  |  
  165.           +-------------------------+  \  Aus Redundanzgrnden 
  166.           | word bits               |  /  nochmal hier; fr Reparaturzwecke;
  167.           +-------------------------+  |  dieselben Werte, wie in pBlock
  168.           | word strLength          |  |
  169.           +-------------------------+  |
  170.           | word Length             |  |
  171.           +-------------------------+ /
  172.  
  173.  
  174.  
  175.   In Header steht: 
  176.   +-------------------------+
  177.   | Message-ID              | L„nge in idLength, sicher vorhanden
  178.   +=========================+ <- Ein Byte eingeschoben, falls idLength ungerade ist
  179.   | Anzahl der Eintr„ge     | Anzahl der noch folgenden Strings
  180.   +-------------------------+
  181.   | L„nge Eintrag # 1       | L„nge von String Nummer 1 (Betreff)
  182.   +-------------------------+
  183.   .                         .
  184.   .                         .
  185.   +-------------------------+
  186.   | L„nge Eintrag # n       |
  187.   +=========================+
  188.   | Betreff                 | sicher vorhanden
  189.   +=========================+
  190.   | Absender                | wahrscheinlich vorhanden
  191.   +-------------------------+
  192.   | Empf„nger               | sporadisch vorhanden
  193.   +-------------------------+
  194.   | MID                     | Message-ID bei Messages ber ein Gateway
  195.   +-------------------------+
  196.   | RID                     | Kommentar-ID bei Messages ber ein Gateway
  197.   +-------------------------+
  198.   | BOX                     | Hinweise auf Absenderbox
  199.   +-------------------------+
  200.   | Name                    | Name des Absenders, falls nicht gleich "Absender"
  201.   +=========================+
  202.   | Weitere Textinformation | Strings der Maus, die Cat noch nicht kennt
  203.   +=========================+
  204.   | private-Bytes           | Statusdatum, locked, Status 
  205.   +-------------------------+
  206.  
  207. Bis auf die beiden letzten Eintr„ge sind alle Eintr„ge nullterminierte 
  208. Strings und nur vorhanden, wenn in "items" angegeben. Die Reihenfolge gem„ž
  209. "items" wird eingehalten.
  210.  
  211. Also einmal mit Hausnummern:
  212. items = 00000000 00101101 = 2D hex heižt, daž es aužer der Message-ID und 
  213. dem Betreff noch einen Absender, eine Gateway-Message-ID, eine Kommentar-ID 
  214. und eine Namensangabe in dieser Reihenfolge im Header gibt.
  215.  
  216. In der Sparte "Weiter Textinformation" stehen Informationen, die von 
  217. der Maus geliefert werden, aber die Cat noch nicht kennt. Es handelt sich 
  218. dabei um eine Liste nullterminierter Strings, die mit einem leeren
  219. String beendet wird. Der erste Buchstabe der Strings entspricht dem 
  220. vom MausTausch-Protokoll bergebenen.
  221.  
  222. private-Bytes enth„lt die bisherige Sonderinfo aus dem Parameterblock bei 
  223. pers”nlichen Msgs. Der Eintrag ist immer 6 Bytes lang und folgendermažen 
  224. aufgebaut:
  225.  
  226. ----------------------------------------------------------------------*)
  227.  
  228. END dataSys.
  229.